package com.denlaku.longan.controller;

import com.denlaku.longan.http.Return;
import com.denlaku.longan.qo.DashboardQuery;
import com.denlaku.longan.qo.RefreshQuery;
import com.denlaku.longan.vo.ComponentData;
import com.denlaku.longan.vo.Dashboard;
import com.denlaku.longan.vo.PageBy;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/**
 * @author tianx
 */
@RequestMapping("/api/dashboard-config")
public interface DashboardConfigController {
    /**
     * 新增仪表板
     *
     * @param dashboard 仪表板
     * @return 响应对象
     */
    @PostMapping("/add")
    Return<Long> add(@RequestBody Dashboard dashboard);

    /**
     * 更新仪表板
     *
     * @param dashboard 仪表板
     * @return 响应对象
     */
    @PostMapping("/update")
    Return<Long> update(@RequestBody Dashboard dashboard);

    /**
     * 更新仪表板
     *
     * @param dashboard 仪表板
     * @return 响应对象
     */
    @PostMapping("/config")
    Return<Long> config(@RequestBody Dashboard dashboard);

    /**
     * 删除仪表板
     *
     * @param id 仪表板ID
     * @return 响应对象
     */
    @PostMapping("/delete")
    Return<Void> delete(Long id);

    /**
     * 根据ID获取仪表板
     *
     * @param id 仪表板ID
     * @return 响应对象
     */
    @GetMapping("/get")
    Return<Dashboard> get(@RequestParam("id") Long id);

    /**
     * 分页查询仪表板
     *
     * @param dashboard 查询参数
     * @param pageBy 分页参数
     * @return 分页列表
     */
    @PostMapping("/page-list")
    Return<List<Dashboard>> pageList(@RequestBody DashboardQuery dashboard, PageBy pageBy);

    /**
     * 查询仪表板数据
     *
     * @param query 查询参数
     * @return 仪表板数据
     */
    @RequestMapping("/refresh")
    Return<ComponentData> refresh(@RequestBody RefreshQuery query);

    /**
     * 批量查询仪表板数据
     *
     * @param queries 查询参数
     * @return 仪表板数据
     */
    @RequestMapping("/refreshes")
    Return<List<ComponentData>> refreshes(@RequestBody List<RefreshQuery> queries);

}
